之前读的版本是旧版本,现找到2013年出版的新版本资源,章节比之前快一章。(新版本插了一章 Format String作为第6章)
Chapter 13 Objects
生词1
encounter-遭遇,邂逅 convention-约定,惯例 terminology-术语
- #import和#include 区别: #include直接做拷贝-粘贴操作;#import会先检查是否已经在其他文件中包含过了,包含过的话就不再复制;
之前用C写程序,h头文件中,总是这样写#ifndef xxxx #defeine XXXX .... #endif
来避免重复定义等问题,在OC中用#import就不用操心了。 - 变量,方法名:camel case 类名,apple预定义常量: Capitlized
Chapter 14 More Messages
生词1
nested-嵌套的 counterproductive-反生产的,适得其反
1.单个和多个参数消息的发送
[now dateByAddingTimeInterval:1000]
,the colon is an essential part of the method’s name,在这里,没有方法叫做dateByAddingTimeInterval,
只有一个方法叫做dateByAddingTimeInterval:1
2
3[cal ordinalityOfUnit:NSDayCalendarUnit
inUnit:NSMonthCalendarUnit
forDate:now]
前面两个参数是常量,用来指定对三个返回参数的类型;解释为 返回对象now,作为NSDayCalendarUnit这种单位,在NSMonthCalendarUnit这种单位中的位置;
虽然含有三个参数,但是这条语句仍然只是一条消息,不要从形式上看错以为是3个消息;
2.嵌套消息的发送double seconds = [[NSDate date] timeIntervalSince1970]
3.alloc和init方法,alloc为实例申请内存并返回指针,init初始化实例让其ready to work, 这两个方法是每个类都有的,经常嵌套使用。
4.对OC对象使用nil,对其他类型使用NULL作空指针;
5.使用id关键字来定义一个指向位置类型OC对象的指针;
Chapter 15 Objects and Memory
生词1
practical-实用的 perspective-观点 pile-堆 once upon a time-从前 explicitly-明确地
- object存储在heap里面,object指针提供唯一入口,如果将这个指针指向别去,那么就再也没有办法访问到原来的存放在heap中的object,
那么这个object无法使用但却占据了heap存储空间,应该被销毁; - ARC:Automatic Reference Counting:每个对象都知道有多少指针指向自己,当没有指针指向自己的时候,知道自己没用了,就自杀;
Chapter 16 NSString
生词1
manipulate-操作 literal-文字的 reveal-揭露,展开 delimited-规划界限 handy-便利的,手边的
1.方法的声明: class 方法 +开头;instance方法 -开头;
2.通过官方 Documentation and API Reference 获得需要的类信息;
Chapter 17 NSArray
生词1
2immutable-不可变的 iterating-迭代 mutable-易变的,不定性的 populate-填充 subscript-加下标
deprecate-弃用 revert-恢复到 grocery-杂货店,杂货
- literal syntax,
NSArray *datelist = @[now,tomorrow,yesterday];
- 一旦创建完成,NSArray内容无法再做任何修改;
快速枚举语法Fast enumeration:
1
2
3for(NSDate *d in dataList){
NSLog(@"Here is a date: %@", d);
}NSMutableArray可以添加,删除,重新排序指针,
Chapter 18 Your First Classs
生词1
2collectively-共同的,全体的 minus-减去 implicit-隐含的 religious-虔诚的,修道士
collide-冲突
- cocoa是开发环境是五大API之一,包含两个对象库,成为框架:foundation框架和UIKIT框架
- 类的声明:
1
2
3
4
5
6@interface BNRPerson : NSObject
{
float _heightInMeters;
int _weightInKilos;
}
@end
实例变量下划线开头来区分于局部变量。
- #import<>:在标准库(开发环境配置好的)目录中查找文件;#import“”:在当前项目目录里查找文件,找不到的话再去标准库目录中查找文件。
- setter/getter accessor methods.
- self指针
Chapter 19 Properties
生词1
explicit-明确的
- 使用@property定义属性,编译器会自动生成accessor methods。
- Property attribute. 属性的特性
- 点号语法调用 accessor 方法
Chapter 20 Inheritance
生词1
2Inheritance-继承 implication-影响,暗示 redundant-多余的 override-重载
hierarchy-等级
- 通过重写父类的方法来实现重载,只能重载实现方法,不能重载声明中的所有内容
- 使用super指令可以调用父类的方法
- 向一个对象发送消息的时候,从isa 指针一级一级地向上查找方法,直到找到或者到最顶端的类(NSObject)为止
- %@发送一个描述消息给变量对象,每个对象都包含一个description 方法,返回NSString
Chapter 21 Object Instance Variables and Properties
生词1
spouse-配偶 asset-资产 issue-问题,发行,下发 linger-徘徊
- 对象中包含指向对象的指针,ARC
- @class 有点像C语言中的extern,不需要包含头文件,就可以告诉编译器一个class的信息
- 还带这样的?声明的时候生命实例变量是NSMutableArray,再加一条属性是NSArray,两个变量使用同一个名字,
意思就是,告诉外部人员这是个Array是只读的;但是在内部,这个实际上是Mutable的,可修改的?
Chapter 22 Class Extensions
生词1
2```
1. class extension 语法:
@interface BNREmployee()
@property (nonatomic) unsigned int officeAlarmCode;
@end1
2
3
4
5
6
7
8将声明从头文件,将属性以class extension的方式移动到.m文件中:
1>.在别的非本类实例对象中,这个属性是不可见的;
2>.本类的头文件更加简洁,头文件就像一个广告牌,告诉别的开发者哪些事情他们需要知道,太多信息会导致难以阅读和使用;
2. 子类无权限使用父类的class extension内容;
3. 子类无法直接使用继承自父类的属性,但是可以通过点号语法使用
## Chapter 23 Preventing Memory Leaks
生词
consistent-始终如一的 profile-性能分析
```
- strong reference cycles:循环强引用:造成内存泄漏
- 使用XCode提供的性能分析工具检查leaks
- 使用若引用来解决强引用循环问题
@property (nonatomic,weak) BNREmployee *holder;
避免强引用的一个准则是:父亲应该拥有孩子,但是孩子不应当拥有父亲(好吧,我真的不着调怎么翻译才能表达出来真正的意思) - 总结:强引用会让指向的对象无法被删除,弱引用则不会阻止指向的对象被删除,如果弱引用指向的对象被删除,那么它将自动指向nil。